using System.Collections.Generic;
using UnityEngine;
using UnityEditor;//编辑器头文件
using HybridCLR.Editor;
using System;
using System.IO;
 
/// <summary>
/// 构建工具。
/// </summary>
public class BuildTool
{
    /// <summary>
    /// 从打包程序集所在的路径复制.dll文件到资源路径。
    /// </summary>
    [MenuItem("BuildTool/HybridCLRCopyDlls")]//增加菜单项，用于调用执行函数
    public static void HybridCLRCopyDlls()
    {
        //获取“参与热更新程序集”的信息。
        List<String> assemblys = SettingsUtil.HotUpdateAssemblyNamesExcludePreserved;
 
        //获取打包程序集所在的路径
        //Application.dataPath是Assets路径：“xxxxxxxx / Assets”
        string path = ($"{Application.dataPath}/../HybridCLRData/HotUpdateDlls/StandaloneWindows64");
 
        //获取资源路径
        string resourcePath = ($"{Application.dataPath}/StreamingAssets");
        string hotUpdateDllsPath = ($"{Application.dataPath}/HotUpdate/Dlls");
 
        //根据打包程序集所在的路径创建文件夹对象
        DirectoryInfo directoryInfo = new DirectoryInfo(path);
        //获取文件夹中的是所有文件
        FileInfo[] files = directoryInfo.GetFiles();
        //遍历
        foreach (FileInfo file in files)
        {
            //判断后缀与名称
            if (file.Extension == ".dll" && assemblys.Contains(file.Name.Substring(0, file.Name.Length - 4)))
            {
                Debug.Log("复制文件：" + file.Name.Substring(0, file.Name.Length - 4));
                //覆盖文件
                if (File.Exists(resourcePath + "/" + file.Name + ".bytes"))
                {
                    File.Delete(resourcePath + "/" + file.Name + ".bytes");
                }
                if (File.Exists(hotUpdateDllsPath + "/" + file.Name + ".bytes"))
                {
                    File.Delete(hotUpdateDllsPath + "/" + file.Name + ".bytes");
                }
                //复制文件
                file.CopyTo(resourcePath + "/" + file.Name + ".bytes", true);
                file.CopyTo(hotUpdateDllsPath + "/" + file.Name + ".bytes", true);
                Debug.Log("复制文件：" + file.Name);
            }
        }
        
        //保存资源
        AssetDatabase.SaveAssets();
        //刷新project窗口
        AssetDatabase.Refresh();
    }
}